package m1_simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//简单模式---生产者
public class Producer {

    public static void main(String[] args) throws Exception{

        //1 连接  TCP连接-connection，TCP连接中的通道-channel
        //1.1 先建立一个工厂对象，用它去设置这个mq服务器的基本信息
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672); //注意 这个端口号 这个端口号 是用来通信的 （类比mysql的3306端口） 15672只是访问mq客户端页面的一个端口
        f.setUsername("admin");
        f.setPassword("admin");

        //1.2 建立connection连接 很耗时，它是个很重的对象 （mq服务器可以重用这个对象，即把它放进缓存，服务者下次上线时还能用这个连接）
        //tcp连接可以被多个服务提供者共享
        //这步要抛异常
        //由mq服务器去判断是要新建一个TCP连接 还是 重用之前的连接。（一般都会重用之前的连接）
        Connection con = f.newConnection();

        //1.3 虽然tcp可以共享，但还是要在tcp连接上创建虚拟的通道channel，这个channel是独一无二的，每个服务提供者都用自己的通道，互不干扰
        //在连接上建立channel通道
        Channel c = con.createChannel();

        //2.定义队列 （消息在mq服务器中都是放在队列中的）
        //告诉对方服务器我这边服务器要使用的队列是哪个队列
        c.queueDeclare("helloworld",false,false,false,null);


        //3.发送消息

        c.basicPublish("","helloworld",null,"Hello World".getBytes());//最后一个参数要求是byte[] 数组格式

        System.out.println("消息已发送======================");

        //4.断开连接

        c.close(); //由服务器自己决定 这个TCP连接是留着 还是 销毁  （TCP比较重量，一般都会保留）
        con.close(); //由服务器自己决定 这个通道 是留着 还是  销毁  （channel比较轻量，一般都会销毁）

    }

}
